/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package asesor;

import java.util.ArrayList;
import jess.Fact;
import jess.JessException;
import jess.QueryResult;
import jess.Rete;
import jess.ValueVector;

/**
 *
 * @author fikipollo
 */
public class AsesorDELL {

    ArrayList<String> comandos;

    public AsesorDELL() {
        comandos = new ArrayList<String>();
        comandos.add("(batch ./Fuentes/DELL/Inicializar.clp)");
    }

    public ArrayList<String> getComandos() {
        comandos.add("(mostrar_todo)");
        return comandos;
    }

    public void preparaCriterioPredefinido(String configuracion) {
        if (configuracion.equalsIgnoreCase("uso para videojuegos")) {
            //preparaCriterioCPU(2.4, 3.0);
            preparaCriterioPantalla(16.0, 18.0);
            preparaCriterioRAM(4, 8);
            preparaCriterioDiscoDuro(250, 500);
            //preparaCriterioTarjetaGraf(512, 1000);
        } else if (configuracion.equalsIgnoreCase("Uso doméstico")) {
            preparaCriterioPantalla(16.0, 18.0);
            preparaCriterioDiscoDuro(250, 500);
        } else {
            preparaCriterioBateria(4, 10);
        }
    }

    public void preparaCriterioPrecio(double precioMin, double precioMax) {
        comandos.add("(assert (rango-precio " + precioMin + " " + precioMax + "))");
    }

    public void preparaCriterioPantalla(double pantallaMin, double pantallaMax) {
        comandos.add("(assert (tamagno-pantalla " + pantallaMin + " " + pantallaMax + "))");
    }

    public void preparaCriterioRAM(int ramMin, int ramMax) {
        comandos.add("(assert (ram " + ramMin + " " + ramMax + "))");
    }

    public void preparaCriterioBateria(int batMin, int batMax) {
        comandos.add("(assert (bateria " + batMin + " " + batMax + "))");
    }

    public void preparaCriterioGarantía(int garantiaMin) {
        comandos.add("(assert (garantia " + garantiaMin + "))");
    }

    public void preparaCriterioDiscoDuro(int discoMin, int discoMax) {
        comandos.add("(assert (disco " + discoMin + " " + discoMax + "))");
    }

    public void preparaCriterioTarjetaGraf(int tarjetaGrafMin, int tarjetaGrafMax) {
        comandos.add("(assert (video " + tarjetaGrafMin + " " + tarjetaGrafMax + "))");
    }

    public void preparaCriterioCPU(double vCPUMin, double vCPUMax) {
        comandos.add("(assert (velocidad " + vCPUMin + " " + vCPUMax + "))");
    }

    public void preparaCriterioSO(String SO) {
        comandos.add("(assert (so " + SO + "))");
    }

    public ArrayList<String> devolverResulados(Rete m_rete)  {
        ArrayList resultado = new ArrayList();
        try {
            QueryResult result = m_rete.runQueryStar("obtener-portatiles", new ValueVector());
            while (result.next()) {
                Fact f = (Fact) result.getObject("port");
                String marca = f.getSlotValue("marca").toString();
                String familia = f.getSlotValue("familia").toString();
                String modelo = f.getSlotValue("nombre").toString();
                String procesador = f.getSlotValue("procesador").toString();
                String cores = f.getSlotValue("cores").toString();
                String velocidad = f.getSlotValue("velocidad").toString();
                String ram = f.getSlotValue("ram").toString();
                String tarjetaGrafica = f.getSlotValue("tarjetaGrafica").toString();
                String memGrafica = f.getSlotValue("memGrafica").toString();
                String disco = f.getSlotValue("disco").toString();
                String so = f.getSlotValue("so").toString();
                String precio = f.getSlotValue("precio").toString();
                String pantalla = f.getSlotValue("pantalla").toString();
                String duracionBateria = f.getSlotValue("duracionBateria").toString();
                String garantia = f.getSlotValue("garantia").toString();

                String descripcion = ""
                        + "Portatil  " + marca + " " + familia  + " " + modelo
                        + "\nProcesador " + procesador + " de " + cores +  " a " + velocidad + " GHz"
                        + "\nRam: " + ram + "GB"
                        + "\nPantalla " + pantalla + " pulgadas"
                        + "\nDisco Duro de  " + disco + " GB"
                        + "\nSistema Operativo: " + so
                        + "\nDuración de la bateria: " + duracionBateria + " Horas"
                        + "\nTarjeta Grafica " + tarjetaGrafica + " de " + memGrafica + " MB"
                        + "\nGarantia: " + garantia
                        + "\nA partir de : " + precio + " Euros";
                resultado.add(descripcion);
            }
        } catch (JessException ex) {
            System.out.println("ERROR IMPRIMIENDO PORTATILES DELL \n" + ex);
        }

        return resultado;
    }
}
